package com.flex.exception;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.mybatisflex.core.util.ArrayUtil;
import com.mybatisflex.core.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import java.util.Collection;
import java.util.Map;

/**
 * @description: 自定义断言工具类
 * @Author yl
 * @Date 2024/3/12 11:19
 */
public class FlexAssert extends Assert {

    private static final Logger logger = LoggerFactory.getLogger(FlexAssert.class);


    public FlexAssert() {
    }

    /**
     * 判断表达式expression是否为true，若为false则抛异常
     *
     * @param expression 表达式
     * @param message    自定义异常信息，可用{}代替params
     * @param params     异常变量信息
     */
    public static void isTrue(boolean expression, String message, Object... params) {
        if (!expression) {
            logger.error(message,params);
            throw new BusinessException(message, params);
        }
    }

    /**
     * 判断表达式expression是否为false，若为true则抛异常
     *
     * @param expression 表达式
     * @param message    自定义异常信息
     * @param params     异常变量信息
     */
    public static void isFalse(boolean expression, String message, Object... params) {
        isTrue(!expression, message, params);
    }

    /**
     * 判断对象object是否为null，若不为null则抛异常
     *
     * @param object  参数对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void isNull(Object object, String message, Object... params) {
        isTrue(object == null, message, params);
    }

    /**
     * 判断对象object是否不为null，若为null则抛异常
     *
     * @param object  参数对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void notNull(Object object, String message, Object... params) {
        isTrue(object != null, message, params);
    }

    /**
     * 判断String类型值不为空，否则抛异常
     *
     * @param value   参数对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void notEmpty(String value, String message, Object... params) {
        isTrue(StringUtil.isNotBlank(value) && value != null, message, params);
    }

    /**
     * 判断Collection集合对象不为空，否则抛异常
     *
     * @param collection 参数对象
     * @param message    自定义异常信息
     * @param params     异常变量信息
     */
    public static void notEmpty(Collection<?> collection, String message, Object... params) {
        isTrue(CollectionUtils.isNotEmpty(collection), message, params);
    }

    /**
     * 判断Map对象不为空，否则抛异常
     *
     * @param map     参数对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void notEmpty(Map<?, ?> map, String message, Object... params) {
        isTrue(!map.isEmpty(), message, params);
    }

    /**
     * 判断Map对象是否为空，否则抛异常
     *
     * @param map     参数对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void isEmpty(Map<?, ?> map, String message, Object... params) {
        isTrue(CollectionUtils.isEmpty(map), message, params);
    }

    /**
     * 判断数组array是否为空，否则抛异常
     *
     * @param array   数组对象
     * @param message 自定义异常信息
     * @param params  异常变量信息
     */
    public static void notEmpty(Object[] array, String message, Object... params) {
        isTrue(ArrayUtil.isNotEmpty(array), message, params);
    }

    /**
     * 判断result是否不为0，若为0就抛异常
     *
     * @param result  sap请求返回编码
     * @param message 自定义补充请求失败抛异常信息
     */
    public static void resultNotZero(Integer result, String message) {
        if (result == 0) {
            logger.error("更新数据失败------{}",message);
            throw new BusinessException(message);
        }
    }

}
